\chapter{QSsl}

QSsl 命名空间为所有的 SSL 类声明了通用的枚举类型。

\begin{tabular}{|r|l|}
	\hline
	属性 & 方法 \\
	\hline
	头文件 & \#include <QSsl>\\      
	\hline
	qmake & QT += network\\      
	\hline
	引入版本 &	Qt4.3 \\ 
	\hline
\end{tabular}

该命名空间最初在 Qt4.3 版本引入。

\begin{compactitem}
\item 您可以在 QSsl\_Obsolete 找到已废弃的枚举类型。
\end{compactitem}

\section{类型}


\begin{tabular}{|r|m{27em}|}
	\hline 
	类型 	&属性 \\ 
	\hline
enum &	AlternativeNameEntryType \{ EmailEntry, DnsEntry, IpAddressEntry \} \\ 
\hline
enum &	EncodingFormat { Pem, Der } \\ 
\hline
enum &	KeyAlgorithm \{ Rsa, Dsa, Ec, Dh, Opaque \} \\ 
\hline
enum &	KeyType \{ PrivateKey, PublicKey \} \\ 
\hline
enum &	SslOption \{ SslOptionDisableEmptyFragments, SslOptionDisableSessionTickets, SslOptionDisableCompression, SslOptionDisableServerNameIndication, SslOptionDisableLegacyRenegotiation, …, SslOptionDisableServerCipherPreference \} \\ 
\hline
flags &	SslOptions \\ 
\hline
enum &	SslProtocol \{ SslV3, SslV2, TlsV1\_0, TlsV1\_0OrLater, TlsV1, …, SecureProtocols \} \\ 
	\hline 
\end{tabular}



\section{详细介绍}

无。

\section{类型文档}

enum QSsl::AlternativeNameEntryType

描述 QSslCertificate 中条目的可替代名称的键类型。

\begin{tabular}{|r|l|m{25em}|}
	\hline
	常量 	&值& 	描述 \\ 
	\hline
QSsl::EmailEntry  &	0 	&电子邮件条目。该条目中包含证书有效的电子邮件地址。\\
\hline
QSsl::DnsEntry 	&1& 	DNS 主机名条目。 该条目包含证书有效的主机名条目。 该条目也可能包含通配符。\\
\hline
QSsl::IpAddressEntry 	&2& 	IP 地址条目。 该条目包含 Qt 5.13 中引入的证书有效的IP地址条目。\\
	\hline
\end{tabular}


\begin{notice}
在 Qt 4中，这个枚举被叫做 AlternateNameEntryType。 这个名称在 Qt 5 中已不被推荐使用。
\end{notice}

\begin{seeAlso}
QSslCertificate::subjectAlternativeNames()。
\end{seeAlso}


enum QSsl::EncodingFormat

描述证书和密钥支持的编码类型。

\begin{tabular}{|l|l|l|}
	\hline
	常量 	&值& 	描述 \\ 
	\hline
	QSsl::Pem &	0 	&PEM 格式 \\ 
	\hline
	QSsl::Der &	1& 	DER 格式 \\ 
	\hline
\end{tabular}


enum QSsl::KeyAlgorithm

描述了 QSslKey 支持的不同的密钥加密算法。

\begin{tabular}{|l|l|l|}
	\hline
	常量 	&值& 	描述 \\ 
	\hline
	QSsl::Rsa &	1 	&RSA 算法。 \\ 
	\hline
	QSsl::Dsa &	2 	&DSA 算法。 \\ 
	\hline
	QSsl::Ec 	&3 	&椭圆曲线算法。 \\ 
	\hline
	QSsl::Dh 	&4 	&Diffie-Hellman算法。 \\ 
	\hline
	QSsl::Opaque &	0 &	密钥将被 QSslKey 作为黑匣子。 \\ 
	\hline
\end{tabular}

不透明的密钥功能（ QSsl::Opaque ）允许应用程序添加对 Qt 当前不提供的功能（例如 PKCS＃11 ）的支持。

enum QSsl::KeyType

描述了 QSslKey 支持的两种密钥类型。

\begin{tabular}{|l|l|l|}
\hline
常量 	&值& 	描述 \\ 
\hline
QSsl::PrivateKey 	&0 &	私钥 \\ 
\hline
QSsl::PublicKey 	&1 &	公钥 \\ 
\hline
\end{tabular}


enum QSsl::SslOption flags QSsl::SslOptions

描述可用于控制 SSL 详细行为的选项。 这些选项通常用于关闭功能以解决有问题的服务器。


\begin{tabular}{|l|l|m{15em}|}
\hline
常量 	&值& 	描述 \\ 
\hline
QSsl::SslOptionDisableEmptyFragments &	0x01 &	使用分组密码时，禁止将空片段插入数据中。 启用该选项后，这可以防止某些攻击（例如 BEAST 攻击），但是与某些服务器不兼容。 \\ 
\hline
QSsl::SslOptionDisableSessionTickets 	&0x02 &	禁用 SSL 会话票证扩展。 这可能会导致连接设置变慢，但是某些服务器不兼容该扩展。 \\ 
\hline
QSsl::SslOptionDisableCompression 	&0x04 &	禁用 SSL 压缩扩展。 启用该功能后，这将允许压缩通过 SSL 传递的数据，但是某些服务器与此扩展不兼容。 \\ 
\hline
QSsl::SslOptionDisableServerNameIndication& 	0x08 &	禁用SSL服务器名称指示扩展名。 启用后，它会告知服务器正在访问的虚拟主机，从而使其可以使用正确的证书进行响应。 \\ 
\hline
QSsl::SslOptionDisableLegacyRenegotiation &	0x10 	&禁用用于重新协商连接参数的较旧的不安全机制。 启用后，此选项可以允许旧服务器连接，但是它带来了攻击者可能将纯文本注入 SSL 会话的可能性。 \\
\hline
QSsl::SslOptionDisableSessionSharing &	0x20 	&通过会话 ID 握手属性禁用 SSL 会话共享。 \\ 
\hline
QSsl::SslOptionDisableSessionPersistence &	0x40 &	禁用以 QSslConfiguration::sessionTicket() 返回的 ASN.1 格式存储 SSL 会话。 启用此功能会为每个使用的会话票证增加大约1K的内存开销。 \\ 
\hline
QSsl::SslOptionDisableServerCipherPreference 	&0x80 &	禁用基于服务器首选项而非客户端发送的顺序密码来选择所选密码的功能。 此选项仅与服务器套接字相关，并且仅由 OpenSSL 后端使用。 \\
\hline
\end{tabular}


默认情况下，SslOptionDisableEmptyFragments 选项处于启用状态，因为这会导致大量服务器出现问题。 
SslOptionDisableLegacyRenegotiation 选项也处于启用状态，因为它带来了安全风险。 
启用 SslOptionDisableCompression 可以防止 CRIME 公开攻击。 
SslOptionDisableSessionPersistence 也处于启用状态以优化内存使用。 
其他选项处于关闭状态。

\begin{notice}
以上选项的可用性取决于所使用的 SSL 后端的版本。
\end{notice}

SslOptions 类型是由 typedef QFlags<SslOption> 定义的用户自定义类型。它储存着 SslOption 值的OR组合。

enum QSsl::SslProtocol

描述密码的协议。

\begin{longtable}[l]{|l|l|m{20em}|}
\hline
常量 	&值& 	描述 \\ 
\hline
QSsl::SslV3 &	0 &	SSLv3。不被 QSslSocket 支持。\\
\hline
QSsl::SslV2 &	1 &	SSLv2。不被 QSslSocket 支持。\\
\hline
QSsl::TlsV1\_0 &	2 &	TLSv1.0。\\
\hline
QSsl::TlsV1\_0OrLater &	8 &	TLSv1.0 和之后的版本。由于平台限制，在使用 WinRT 后端时，此选项不可用。 \\
\hline
QSsl::TlsV1 	&TlsV1\_0 &	已废弃，与 TlsV1\_0 意义相同。\\
\hline
QSsl::TlsV1\_1 &	3 &	TLSv1.1。当使用WinRT 后端时，这个选项也会启用 TLSv1.0 选项。\\
\hline
QSsl::TlsV1\_1OrLater &	9 &	TLSv1.1 和之后的版本。由于平台限制，在使用 WinRT 后端时，此选项不可用。\\
\hline
QSsl::TlsV1\_2 &	4 &	TLSv1.2。当使用WinRT 后端时，这个选项也会启用 TLSv1.0 和 TLSv1.1 选项。\\
\hline
QSsl::TlsV1\_2OrLater &	10 &	TLSv1.2 和之后的版本。由于平台限制，在使用 WinRT 后端时，此选项不可用。\\
\hline
QSsl::DtlsV1\_0 &	11 	&DTLSv1.0。\\
\hline
QSsl::DtlsV1\_0OrLater& 	12 	&DTLSv1.0 和之后的版本。\\
\hline
QSsl::DtlsV1\_2 &	13& 	DTLSv1.2。\\
\hline
QSsl::DtlsV1\_2OrLater &	14 &	DTLSv1.2 和之后的版本。\\
\hline
QSsl::TlsV1\_3 	&15 &	TLSv1.3。（在 Qt 5.12 版本引入）\\
\hline
QSsl::TlsV1\_3OrLater &	16 &	TLSv1.3 和之后的版本。（在 Qt 5.12 版本引入）\\
\hline
QSsl::UnknownProtocol &	-1 &	不能甄别密码的协议。\\
\hline
QSsl::AnyProtocol &	5 &	任何支持的协议。 该选项仅被 QSslSocket 使用。\\
\hline
QSsl::TlsV1SslV3 &	6 &	与 TlsV1\_0 相同。 该枚举成员已不被推荐使用，您应该使用 TlsV1\_0 来替代。\\
\hline
QSsl::SecureProtocols 	&AnyProtocol + 2 &	默认选项，使用已知是安全的协议。\\
\hline
\end{longtable}

\section{已废弃成员}

下列是 QSsl 中已废弃的枚举类型。为了让旧版本的代码依旧能够运行， Qt 仍然提供这些自定义类型。Qt 官方强烈建议不在新代码中使用这些枚举类型。

\subsection{类型}

\begin{tabular}[l]{|l|l|}
\hline
类型 &	属性 \\ 
\hline
(obsolete) typedef &	AlternateNameEntryType \\ 
\hline
\end{tabular}

\section{类型文档}

typedef QSsl::AlternateNameEntryType

该自定义类型已废弃。
为了让旧版本的代码依旧能够运行， Qt 仍然提供这些自定义类型。Qt 官方强烈建议不在新代码中使用这些枚举类型。

请使用 QSsl::AlternativeNameEntryType 枚举作为替代。